package proyectoFC_2_3_3.koyicabuto;

import proyectoFC_2_3_3.koyicabuto.funciones.FuncionesBaseDatos;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.Intent;
import android.database.sqlite.SQLiteDatabase;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.view.View;
import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;
import android.widget.Toast;

public class NuevoUsuarioActivity extends Activity{
	
	private EditText nombreUsuario;
	private ProgressDialog progressDialog;
	private LocationListener locationListener;
	private LocationManager locationManager;
	
	private FuncionesBaseDatos funcionesBaseDatos = new FuncionesBaseDatos();
	
	@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.nuevousuario);
        
        this.nombreUsuario = (EditText)findViewById(R.id.Nombre);
        
        progressDialog = new ProgressDialog(NuevoUsuarioActivity.this);
        progressDialog.setMessage("Obteniendo coordenadas...");
        progressDialog.setIndeterminate(true);
    }
	
	public void onClickBotonGuardar(View view){
		
		String nombre = this.nombreUsuario.getText().toString();
		
		guardaUsuario(nombre, view);
	}
	
	private void guardaUsuario(String nombre, View view){
		boolean error = false;
		
		SQLiteDatabase gruposDataBase = funcionesBaseDatos.conectaWritableBaseDeDatos(view.getContext());
		
		try{
			if(gruposDataBase != null){
				
				//Guardamos el Usuario
				gruposDataBase.execSQL("INSERT INTO USUARIO (USU_NOMBRE) " +
									   "VALUES('" + nombre + "')") ;
			}
			funcionesBaseDatos.cierraBaseDeDatos(gruposDataBase);
			
		}catch (Exception e) {
			error = true;
			System.out.println("Excepcion al guardar: " +e.getMessage());
		}
		if(!error){
			//Ejecutamos el progressDialog mientras se obtienen las coordenadas del Usuario
			progressDialog.show();
			actualizarPosicion();
		}
	}
	
	private void actualizaCoordenadasBBDD(Location location){
		boolean error = false;
		
		if(location != null){
			try{
				SQLiteDatabase gruposDataBase = funcionesBaseDatos.conectaWritableBaseDeDatos(this);
				
				//Guardamos las coordenadas
				gruposDataBase.execSQL("UPDATE USUARIO " +
									   "SET USU_LATITUD = " + location.getLatitude() + ", " + 
									   "USU_LONGITUD = " + location.getLongitude());
				
				funcionesBaseDatos.cierraBaseDeDatos(gruposDataBase);
				
			}catch (Exception e) {
				error = true;
				System.out.println("Excepcion al actualizar coordenadas: " +e.getMessage());
			}
		}
		if(!error){			
			//Ejecutamos el progressDialog mientras se obtienen las coordenadas del Usuario
			progressDialog.cancel();
			locationManager.removeUpdates(locationListener);
			Toast.makeText(this, "Usuario: " + this.nombreUsuario.getText().toString() + " almacenado correctamente con las coordenadas actuales.", 
						   Toast.LENGTH_SHORT).show();
			
			//Una vez hemos guardado todo, nos vamos a ListaGruposActivity
			Intent i = new Intent(this, ListaGruposActivity.class);
			startActivity(i);
		}
	}
	    
    private void actualizarPosicion(){
        //Obtenemos una referencia al LocationManager
        locationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);

        //Nos registramos para recibir actualizaciones de la posición
        locationListener = new LocationListener() {
        	
            public void onLocationChanged(Location location) {
                actualizaCoordenadasBBDD(location);
            }
            public void onProviderDisabled(String provider){
            }
            public void onProviderEnabled(String provider){
            }
            public void onStatusChanged(String provider, int status, Bundle extras){
            }
        };
     
        locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 5000, 0, locationListener);
    }
    
	public void ocultarTecladoVirtual(View view){
		nombreUsuario.clearFocus();
		
		InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
		imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
	}
}
	